package com.api.file;

import java.lang.annotation.*;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface BOIndex {
    int index();

//    @Target(ElementType.TYPE)——接口、类、枚举、注解
//    @Target(ElementType.FIELD)——字段、枚举的常量
//    @Target(ElementType.METHOD)——方法
//    @Target(ElementType.PARAMETER)——方法参数
//    @Target(ElementType.CONSTRUCTOR) ——构造函数
//    @Target(ElementType.LOCAL_VARIABLE)——局部变量
//    @Target(ElementType.ANNOTATION_TYPE)——注解
//    @Target(ElementType.PACKAGE)——包
//


//    RetentionPolicy.SOURCE:这种类型的Annotations只在源代码级别保留,编译时就会被忽略,在class字节码文件中不包含。
//    RetentionPolicy.CLASS:这种类型的Annotations编译时被保留,默认的保留策略,在class文件中存在,但JVM将会忽略,运行时无法获得。
//    RetentionPolicy.RUNTIME:这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用。
//    那怎么来选择合适的注解生命周期呢？
//    首先要明确生命周期长度 SOURCE < CLASS < RUNTIME ，所以前者能作用的地方后者一定也能作用。一般如果需要
//    在运行时去动态获取注解信息，那只能用 RUNTIME 注解；如果要 在编译时进行一些预处理操作，比如生成一些辅助
//    代码（如 ButterKnife） ，就用 CLASS注解；如果 只是做一些检查性的操作，比如 @Override 和 @SuppressWarnings，则 可选用 SOURCE 注解。


//    @Document：说明该注解将被包含在javadoc中

//    @Inherited：说明子类可以继承父类中的该注解





}